/*
 * UtilAsistente.java
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 16/06/2010, 06:55:38 AM
 */
package com.ufps.cuatro.modelo.codificacion;

import com.ufps.cuatro.modelo.representacion.componente.Componente;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.Icon;
import javax.swing.ImageIcon;

import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorContenedor;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGenerador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorClaseCompleja;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegrador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorModeloAsociado;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.UtileriaBase;
import com.ufps.cuatro.util.model.MyTableModelEstructuraPaquete;
import com.ufps.cuatro.util.model.MyTableModelWizardIntegradorMetodoConfigParams;
import com.ufps.cuatro.util.opciones.MyProperties;


/**
 * <i><b>UtilAsistente:</b></i>@DefinicionClase
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 16/06/2010
 */
public abstract class UtilCodificacion extends UtileriaBase{
    
    /**
     * Contiene el Maximo de Filas para Visualizar las Propiedades de un
     * <code>GridBagConstraints</code> en un <code>JTable</code>.
     */
    public final static int SIZE_PROPERTIES_GRIDBAGCONSTRAINTS = 14;   
    
    /**
     * Variable static para almacenar los Recursos en las Subclases.
     */
    public static org.jdesktop.application.ResourceMap resourceMap;

    static{
        try{
            resourceMap = org.jdesktop.application.Application.getInstance(com.ufps.cuatro.CuatroApp.class).getContext().getResourceMap(UtilCodificacion.class);        
        }catch(java.lang.Exception ex){}
        
    }
    
    /**
     * Devuelve el Recurso de Texto Asociado a la Clave recibida en el Parametro ó
     * un Cadena vacia en Caso de no encontrarse ó presentarse un Error.
     * @param key Clave recibida.
     * @return Recurso de Texto Asociado a la Clave recibida en el Parametro.
     * @see org.jdesktop.application.ResourceMap#getString(java.lang.String, java.lang.Object[]) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static String leerRecursoTexto(String key){
        try{
            if(resourceMap.containsKey(key)){
                return resourceMap.getString(key);
            }
           }catch(java.lang.NullPointerException ex){}
            return "";          
    }

    /**
     * Devuelve el Icono de la Aplicación de acuerdo  al tamaño recibido en el Parametro.
     * @param modo 
     * @return Icono de la Aplicación de acuerdo  al tamaño recibido en el Parametro.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static Icon leerIconoApp(int modo){
        try{
            String key = "Utileria.icono.app." + String.valueOf(modo);
            return resourceMap.getIcon(key);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }

    /**
     * Devuelve el Icono de la Aplicación en Formato Imagen de acuerdo  al tamaño recibido en el Parametro.
     * @param modo 
     * @return Icono de la Aplicación en Formato Imagen de acuerdo  al tamaño recibido en el Parametro.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static ImageIcon leerIconoAppEnImagen(int modo){
        try{
                String key = "Utileria.icono.app." + String.valueOf(modo);
                return resourceMap.getImageIcon(key);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }    
    
    /**
     * Devuelve el Recurso de Gráfico de Icono Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @param key Clave recibida.
     * @param size Tamaño del Icono.
     * @return Recurso de Gráfico de Icono Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static Icon leerRecursoIcono(String key, int size){
       try{
            String strPath = null;
            if(size == 16){
                strPath = key.replaceAll("32x32", "16x16");
            }
            else if(size == 32){
                strPath = key.replaceAll("16x16", "32x32");
            }    
            strPath += UtileriaBase.leerRecursoTexto(key);
            return resourceMap.getIcon(strPath);        
        }catch(java.lang.NullPointerException ex){}
       return null;
    }    
    
    /**
     * Devuelve el Recurso de Gráfico de Imagen Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @param key Clave recibida.
     * @param size Tamaño de la Imagen.
     * @return Recurso de Gráfico de Imagen Asociado a la Clave y al Tamaño recibidos 
     * en los Parametros.
     * @see org.jdesktop.application.ResourceMap#getIcon(java.lang.String) 
     * @throws ResourceMap.LookupException
     * @throws java.lang.IllegalArgumentException
     */
    public static ImageIcon leerRecursoImagen(String key, int size){        
        try{
            String strPath = "";
            if(size == UtileriaBase.SIZE_ICON_16){
                strPath = key.replaceAll("32x32", "16x16");
            }
            else if(size == UtileriaBase.SIZE_ICON_32){
                strPath = key.replaceAll("16x16", "32x32");
            }        
            return resourceMap.getImageIcon(strPath);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    /**
     * Carga un Archivo Properties en el formato válido de la Aplicación
     * para la administración de este tipo de archivo.
     * @param strPath Ruta de la Ubicación del Recurso.
     * @return Archivo Properties ecansulado en un objeto <code>MyProperties</code>.
     */
    public static MyProperties cargar(String strPath){
       try{
            URL url = resourceMap.getClassLoader().getResource(strPath);
            try {
                MyProperties objPropiedades = new MyProperties(url.toURI());
                return objPropiedades;
            } catch (IOException ex) {
                Logger.getLogger(UtileriaBase.class.getName()).log(Level.SEVERE, null, ex);
            } catch (URISyntaxException ex) {
                Logger.getLogger(UtileriaBase.class.getName()).log(Level.SEVERE, null, ex);
            }
            return null;
        }catch(java.lang.NullPointerException ex){}
       return null;
    } 
    //cargarArchivoMyPropierties
    
    /**
     * Carga un Archivo Properties en el formato válido de la Aplicación
     * para la administración de este tipo de archivo.
     * @param objPath Ruta de la Ubicación del Recurso.
     * @return Archivo Properties ecansulado en un objeto <code>MyProperties</code>.
     */
    public static MyProperties cargarFileProperties(File objPath){
       try{
            try {            
                MyProperties objPropiedades = new MyProperties(objPath.toURI());
                return objPropiedades;
            } catch (IOException ex) {
                Logger.getLogger(Utileria.class.getName()).log(Level.SEVERE, null, ex);
            } 
         }catch(java.lang.NullPointerException ex){}   
            return null;
    }
    
    /**
     * @DefinicionMetodo
     * @param objComponentesGeneradores @DefinicionParametro
     * @return @DefinicionReturn
     */
    public static MyTableModelWizardIntegradorMetodoConfigParams crearTablaParametrosWizardIntegrador(ArrayList<Componente> objComponentes){
        try{
            int size = objComponentes.size();
            String[] titulos = {MyTableModelWizardIntegradorMetodoConfigParams.NAME_COLUMN_PARAMETRO, 
                MyTableModelWizardIntegradorMetodoConfigParams.NAME_COLUMN_REPRESENTACION};
            Object[][] datos = new Object[size][2];
            for(int i = 0; i < size; i++){
                Componente objComponente = objComponentes.get(i);
                datos[i][0] = objComponente;            
                datos[i][1] = objComponente;            
            }
            return new MyTableModelWizardIntegradorMetodoConfigParams(titulos, datos);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    /**
     * @DefinicionMetodo
     * @param objComponentesContenedores @DefinicionParametro
     * @return @DefinicionReturn
     */
    public static MyTableModelEstructuraPaquete crearTablaEstructuraPaqueteComponentesContenedores(ArrayList<ComponenteDistribuidorContenedor> objComponentesContenedores){
        try{
            int size = objComponentesContenedores.size();
            String[] titulos = {MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE, 
                MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE};
            Object[][] datos = new Object[size][2];
            for(int i = 0; i < size; i++){
                ComponenteDistribuidorContenedor objComponenteDistribuidor = objComponentesContenedores.get(i);
                datos[i][0] = objComponenteDistribuidor;            
                datos[i][1] = objComponenteDistribuidor;            
            }
            return new MyTableModelEstructuraPaquete(titulos, datos);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    /**
     * @DefinicionMetodo
     * @param objComponentesIntegradores @DefinicionParametro
     * @return @DefinicionReturn
     */
    public static MyTableModelEstructuraPaquete crearTablaEstructuraPaqueteComponentesIntegradores(ArrayList<ComponenteDistribuidorIntegrador> objComponentesIntegradores){
        try{
            int size = objComponentesIntegradores.size();
            String[] titulos = {MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE, 
                MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE};
            Object[][] datos = new Object[size][2];
            for(int i = 0; i < size; i++){
                ComponenteDistribuidorIntegrador objComponenteDistribuidor = objComponentesIntegradores.get(i);
                datos[i][0] = objComponenteDistribuidor;            
                datos[i][1] = objComponenteDistribuidor;            
            }
            return new MyTableModelEstructuraPaquete(titulos, datos);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    /**
     * @DefinicionMetodo
     * @param objComponentesGeneradoresClase @DefinicionParametro
     * @return @DefinicionReturn
     */
    public static MyTableModelEstructuraPaquete crearTablaEstructuraPaqueteComponentesGeneradoresClase(ArrayList<ComponenteDistribuidorGeneradorClaseCompleja> objComponentesGeneradoresClase){
        try{
            int size = objComponentesGeneradoresClase.size();
            String[] titulos = {MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE, 
                MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE};
            Object[][] datos = new Object[size][2];
            for(int i = 0; i < size; i++){
                ComponenteDistribuidorGeneradorClaseCompleja objComponenteDistribuidor = objComponentesGeneradoresClase.get(i);
                datos[i][0] = objComponenteDistribuidor;            
                datos[i][1] = objComponenteDistribuidor;            
            }
            return new MyTableModelEstructuraPaquete(titulos, datos);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    /**
     * @DefinicionMetodo
     * @param objComponentesModeloAsociado @DefinicionParametro
     * @return @DefinicionReturn
     */
    public static MyTableModelEstructuraPaquete crearTablaEstructuraPaqueteComponentesModeloAsociado(ArrayList<ComponenteDistribuidorModeloAsociado> objComponentesModeloAsociado){
       try{
            int size = objComponentesModeloAsociado.size();
            String[] titulos = {MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE, 
                MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE};
            Object[][] datos = new Object[size][2];
            for(int i = 0; i < size; i++){
                ComponenteDistribuidorModeloAsociado objComponenteDistribuidor = objComponentesModeloAsociado.get(i);
                datos[i][0] = objComponenteDistribuidor;            
                datos[i][1] = objComponenteDistribuidor;            
            }
            return new MyTableModelEstructuraPaquete(titulos, datos);
        }catch(java.lang.NullPointerException ex){}
       return null;
    }
   
}
